package FileMethod.Practice;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Five {
    public static void main(String[] args) {
        /**
         * 题目:统计一个文件夹中每种文件的个数并打印(考虑子文件夹)
         *
         * 打印格式:
         *      txt:3个
         *      doc:4个
         *      jpg:6个
         *      ...
         */

        File file=new File("D:\\HTML");
        HashMap<String, Integer> statistics = statistics(file);
        System.out.println(statistics);

    }

    public static HashMap<String,Integer> statistics(File src){
        //定义集合统计数据
        HashMap<String,Integer> hm=new HashMap<>();
        //进入src文件夹
        File[] files = src.listFiles();
        //通过遍历files获取数据
        for (File file : files) {
            /**
             * 判断是否为文件夹
             *
             *      如果是”文件“进行统计
             */
            if(file.isFile()){
                //获取文件名字getName
                String name=file.getName();
                //切割获取后缀名split
                String[] arr=name.split("\\.");

                //利用长度获取排除没有后缀名的情况  列如:aaa  bbb
                if(arr.length>=2){
                    /*
                    -1:获取最大的数组，用来排除特殊情况  例如:a.a.txt  b.c.c.exe...
                     */
                    String endName = arr[arr.length - 1];
                    //判断是否已经进行存储
                    if(hm.containsKey(endName)){
                        //存储过的情况
                        int count = hm.get(endName);
                        count++;

                        //对其进行添加
                        hm.put(endName,count);
                    }else{
                        //没有存储过的情况
                        hm.put(endName,1);
                    }
                }
            }else{
                //如果是“文件夹”,进行递归
                HashMap<String,Integer> sonMap=statistics(file);
                //通过entrySet将sonMap的数据
                Set<Map.Entry<String,Integer>> entries=sonMap.entrySet();

                for (Map.Entry<String, Integer> entry : entries) {
                    //获取键
                    String key = entry.getKey();
                    //获取值
                    int value=entry.getValue();
                    //判断键
                    if(hm.containsKey(key)){
                        //存在情况
                        int count=hm.get(key);
                        //count:表示已经存在的数量
                        //value:表示新的数量
                        count=count+value;
                        //key:表示后缀名
                        //count:表示数量
                        hm.put(key,count);
                    }else{
                        //不存在情况
                        hm.put(key,value);
                    }
                }
            }
        }

        return hm;
    }
}
